#学员信息在线管理

#导入pymysql模块
import pymysql

class Stu:
    def __init__(self):
        #获取数据库连接
        self.db=pymysql.connect(host="localhost",user="root",password="",db="school",charset="utf8")

    def __del__(self):
        #关闭数据库连接
        self.db.close()
            
    # 读取数据库学生表信息
    def __getStudent(self):
        '''读取数据库学生表信息'''
        #创建游标对象
        cursor=self.db.cursor()

        stulist=[]
        try:
            #执行sql操作
            cursor.execute("select * from student")

            #解析结果
            slist=cursor.fetchall()
            for st in slist:
                stulist.append(list(st))
        except:
            stulist=[]
        return stulist

    # 读取数据库学生表信息
    def addStudent(self,data):
        '''读取数据库学生表信息'''
        #创建游标对象
        cursor=self.db.cursor()

        stulist=[]
        try:
            #执行sql操作
            sql="insert into student(name,age,classid) values('%s','%d','%s')"%(data["name"],int(data["age"]),data["classid"])
            
            cursor.execute(sql)

            #事务提交
            self.db.commit()
            
        except Exception as err:
            self.db.rollback()
            print("SQL执行错误！原因：",err)

    # 删除数据库学生表信息
    def delStudent(self,id):
        '''删除数据库学生表信息'''
        #创建游标对象
        cursor=self.db.cursor()

        stulist=[]
        try:
            #执行sql操作
            sql="delete from student where id=%d"%(id)
            
            cursor.execute(sql)

            #事务提交
            self.db.commit()
            
        except Exception as err:
            self.db.rollback()
            print("SQL执行错误！原因：",err)
            
    #定义一个学生信息的输出函数
    def findAll(self):
        '''
        学生信息的输出函数
        '''
        stulist=self.__getStudent()

        if len(stulist)==0:
            print("="*12,"没有学员信息可以输出！","="*12)
            return
        print("|{0:<5}| {1:<10}| {2:<5}| {3:<5}|".format("sid","name","age","classid"))
        print("-"*40)

        for st1 in stulist:
            print("|{0:<5}| {1:<10}| {2:<5}| {3:<5}|".format(st1[0],st1[1],st1[2],st1[3]))


'''输出初始界面'''
while True:
    #类的实例化
    s = Stu()
    
    print("="*14,"学员管理系统","="*14)
    print()
    print("{0:1}{1:15}{2:15}".format(" ","1. 查看学员信息","2. 添加学员信息"))
    print()
    print("{0:1}{1:15}{2:15}".format(" ","3. 删除学员信息","4. 退出系统"))
    print()
    print("="*42)
    key=input("请输入对应的选择：")

    #根据键盘值，判断并执行对应的操作

    if key=="1":
        print("="*12,"学员信息浏览","="*14)
        s.findAll()
        input("按回车键继续：")
    elif key=="2":
        print("="*12,"学员信息添加","="*14)
        stu={}
        stu['name']=input("请输入姓名：")
        stu['age']=input("请输入年龄：")
        stu['classid']=input("请输入班级号：")
        s.addStudent(stu)
        s.findAll()
        input("按回车键继续：")
    elif key=="3":
        print("="*12,"学员信息删除","="*14)
        s.findAll()
        sid=input("请输入你要删除的id号：")
        s.delStudent(int(sid))
        s.findAll()
        input("按回车键继续：")
    elif key=="4":
        print("="*12,"退出","="*14)
        break
    else:
        print("==============  无效的键盘输入！  ==============")

    # 删除对象
    del s
